package com.vk.work2pdfdemo.utils;

import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedWriter;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.file.Files;
import java.util.Map;

/**
 * @author Yin
 * @apiNote 生成动态文档帮助类
 * 2024/02/06
 */
@Data
@Slf4j
public class WordUtil {

    private Configuration configuration;

    /*
     * 模板文件存放的目录
     */
    private String baseDir;

    /*
     * 模板文件名称
     */
    private String templateFile = "委托服务合同.ftl";

    /*
     * word生成的输出目录
     */
    private String outputDir;

    /**
     * 甲方客户名称
     */
    private String enterpriseName;

    /**
     * 合同名称
     */
    private String contractName;


    public WordUtil(){
        configuration = new Configuration();
        configuration.setDefaultEncoding("UTF-8");
    }

    /*
     * <p>转换成word<br>
     */

    public String createWord(Map<String,Object> dataMap){

        configuration.setClassForTemplateLoading(this.getClass(), "");//模板文件所在路径

        Template t = null;

        try {
            //得到模板文件
            configuration.setDirectoryForTemplateLoading(new File(baseDir));
            t = configuration.getTemplate(templateFile);
        } catch (Exception e) {
            log.error("获取模板文件异常：", e);
        }

        //导出文件
        //                                输出目录 +     供应商名称 +      合同名称 +       文件类型
        File outFile = new File(outputDir + enterpriseName + contractName  + ".docx");

        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(outFile.toPath())));
        } catch (Exception e) {
            log.error("", e);
        }
        try {
            if (null != t) {
                t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件
            } else {
                log.error("没有获取到模板文件");
            }
            return outFile.getPath();
        } catch (Exception e) {
            log.error("文档生成异常：", e);
        }
        return "文档生成失败";
    }

}

